#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@File   : poweroff.py
@Time : 2025/1/7 15:30
@Author: Wangwc
@Describe:  ……
"""
import time
import traceback
from commons.time_format import TimeFormat
from business.SystemApi import SystemApi
from utils.login import Login
from commons.logger import log

# TODO 当前模块的配置文件名称，配置在config目录下
config_name = "storage.ini"
login = Login(config_name=config_name)

# 定义最大重试次数
MAX_RETRIES = 3
# 定义每次重试等待时间（单位：秒）
RETRY_WAIT_TIME = 20


def init_api():
    """
    用于初始化SystemApi客户端的夹具
    通过重试机制尝试登录获取token，若登录失败则等待一段时间后再次尝试，最多重试MAX_RETRIES次。
    """
    retries = 0
    while retries < MAX_RETRIES:
        try:
            token = login.login()
            log.info("成功登录，获取到token，用于初始化SystemApi客户端。")
            return SystemApi(token)
        except Exception as e:
            retries += 1
            if retries < MAX_RETRIES:
                log.warning(f"登录失败，正在进行第{retries}次重试，异常信息: {str(e)}")
                log.warning(f"等待{RETRY_WAIT_TIME}秒后再次尝试登录...")
                time.sleep(RETRY_WAIT_TIME)
            else:
                log.error(f"达到最大重试次数{MAX_RETRIES}，仍然无法登录，异常信息: {str(e)}")
                log.error(f"完整异常堆栈信息: {traceback.format_exc()}")
                raise  # 若达到最大重试次数仍失败，则抛出异常，由调用者处理


def poweroff(i):
    try:
        log.info(f"第{i + 1}次执行关机与定时开机操作{'-' * 80}")
        system = init_api()
        up_time = TimeFormat.get_future_time(2)
        log.info(f"设置的开机时间为：{up_time}")
        version = system.get_firmware_version()
        log.info(f"当前固件版本为：{version}")
        system.set_power_up(up_time)
        time.sleep(3)
        system.power_off()
    except Exception as e:
        log.error(f"执行关机与定时开机操作出现异常，异常信息: {str(e)}")
        log.error(f"完整异常堆栈信息: {traceback.format_exc()}")


if __name__ == "__main__":
    for i in range(1000):
        poweroff(i)
        log.info(f"第{i+1}次关机操作完成，等待180秒后进行下一次操作...")
        time.sleep(180)
